package org.sky.algorithm.linear;

/**
 * 双向循环类表
 *
 * @author fog
 * @date 2021/9/5
 */

public class DoubleNode {

    /**
     * 上一个节点
     */
    DoubleNode pre = this;

    /**
     * 下一个节点
     */
    DoubleNode next = this;

    /**
     * 节点数据
     */
    int data;

    public DoubleNode(int data) {
        this.data = data;
    }

    /**
     * 增加节点
     *
     * @param doubleNode 节点数据
     */
    public void addNode(DoubleNode doubleNode) {

        // 原来的下一个节点
        DoubleNode nextNode = next;
        // 把新的节点当做为当亲节点的前一个节点
        this.next = doubleNode;
        // 把当前节点做新的节点的前一个节点
        doubleNode.pre = this;
        // 让原来的节点下一个节点作新节点的下一个节点
        doubleNode.next = nextNode;
        // 让原来的下一个节点的上一个节点为新节点
        nextNode.pre = doubleNode;

    }

    /**
     * 下一个节点
     */
    public DoubleNode next() {
        return this.next;
    }

    /**
     * 上一个节点
     */
    public DoubleNode pre() {
        return this.pre;
    }

    /**
     * 获取节点中的数据
     *
     * @return 节点数据
     */
    public int getData() {
        return this.data;
    }

}
